package com.tutor.lzm.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

import com.tutor.lzm.app.CommonValue;
import com.tutor.lzm.app.Constant;
import com.tutor.syslib.util.MessageTools;

import java.io.File;

import static com.tutor.lzm.app.Constant.REQUEST_CODE_BASE;

/**
 * Created by zzgpc on 2017-9-24.
 * 图片处理，拍照处理
 */
public class ImageUtils {

    /**
     * 裁剪图片方法实现
     *
     * @param uri
     */

    public static void startPhotoZoom(Context context, Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
//        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//ACTION_OPEN_DOCUMENT
        intent.setDataAndType(uri, "image/*");
        // 设置裁剪
        intent.putExtra("crop", "true");
//        intent.putExtra("output", Uri.fromFile(cameraFile));
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 150);
        intent.putExtra("outputY", 150);
        intent.putExtra("return-data", true);
        ((Activity) context).startActivityForResult(intent, Constant.RESULT_REQUEST_CODE);
    }



    /**
     * 相册
     **/
    public static void choicePicture(Activity act) {
        Intent intent;
        if (Build.VERSION.SDK_INT < 19) {
            intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.setType("image/*");

        } else {
            intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        }
        act.startActivityForResult(intent, Constant.REQUEST_PICTURE);
    }

    /**
     * 拍照
     **/
    public static void takePicture(final Activity act, File tempFile) {


        try {
            if (hasSdcard()) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                // 指定调用相机拍照后照片的储存路径
//                File tempFile = new File(Environment.getExternalStorageDirectory(),fileName);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
                act.startActivityForResult(intent, Constant.REQUEST_CODE_BASE);
            }
        } catch (Exception e) {
            MessageTools.showDialogOk(act, "请查看相机权限是否被禁止...");
        }
//            //打开相机应用
//            Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//            //设置图片保存路径
//            String fileName = Environment.getExternalStorageDirectory() + "/parkman";
//            File f = new File(fileName);
//            if (!f.exists()) {
//                f.mkdir();
//            }
//
//            long nowTime = System.currentTimeMillis();
//            String pictureName = +nowTime + ".jpg";
//            Uri imageUri = Uri.fromFile(new File(fileName, pictureName));
//            openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
//            openCameraIntent.putExtra("fileName", imageUri);
//            PhotoUtil.openCameraUri = imageUri.toString();
//            act.startActivityForResult(openCameraIntent, REQUEST_CODE_BASE);
//        } catch (Exception e) {
//            MessageTools.showDialogOk(act, "请查看相机权限是否被禁止...");
//        }
    }


    /**
     * 拍照
     **/
    public static void takePicture(Activity act) {

        //打开相机应用
        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //设置图片保存路径
        String fileName = Environment.getExternalStorageDirectory() + "/tutor";
        File f = new File(fileName);
        if (!f.exists()) {
            f.mkdir();
        }

        long nowTime = System.currentTimeMillis();
        String pictureName = +nowTime + ".jpg";
        Uri imageUri = Uri.fromFile(new File(fileName, pictureName));
        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        openCameraIntent.putExtra("fileName", imageUri);
        CommonValue.openCameraUri = imageUri.toString();
        act.startActivityForResult(openCameraIntent, Constant.REQUEST_CODE_BASE);


    }


    public static boolean hasSdcard() {

        String state = Environment.getExternalStorageState();
        if (state.equals(Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    @SuppressLint("NewApi")
    public static String getPath(final Context context, final Uri uri) {

        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

        // DocumentProvider
        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
            // ExternalStorageProvider
            if (isExternalStorageDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                if ("primary".equalsIgnoreCase(type)) {
                    return Environment.getExternalStorageDirectory() + "/"
                            + split[1];
                }

                // TODO handle non-primary volumes
            }
            // DownloadsProvider
            else if (isDownloadsDocument(uri)) {

                final String id = DocumentsContract.getDocumentId(uri);
                final Uri contentUri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"),
                        Long.valueOf(id));

                return getDataColumn(context, contentUri, null, null);
            }
            // MediaProvider
            else if (isMediaDocument(uri)) {
                final String docId = DocumentsContract.getDocumentId(uri);
                final String[] split = docId.split(":");
                final String type = split[0];

                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }

                final String selection = "_id=?";
                final String[] selectionArgs = new String[]{split[1]};

                return getDataColumn(context, contentUri, selection,
                        selectionArgs);
            }
        }
        // MediaStore (and general)
        else if ("content".equalsIgnoreCase(uri.getScheme())) {

            // Return the remote address
            if (isGooglePhotosUri(uri))
                return uri.getLastPathSegment();

            return getDataColumn(context, uri, null, null);
        }
        // File
        else if ("file".equalsIgnoreCase(uri.getScheme())) {
            return uri.getPath();
        }

        return null;
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is ExternalStorageProvider.
     */
    public static boolean isExternalStorageDocument(Uri uri) {

        return "com.android.externalstorage.documents".equals(uri
                .getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is DownloadsProvider.
     */
    public static boolean isDownloadsDocument(Uri uri) {

        return "com.android.providers.downloads.documents".equals(uri
                .getAuthority());
    }

    /**
     * Get the value of the data column for this Uri. This is useful for
     * MediaStore Uris, and other file-based ContentProviders.
     *
     * @param context       The context.
     * @param uri           The Uri to query.
     * @param selection     (Optional) Filter used in the query.
     * @param selectionArgs (Optional) Selection arguments used in the query.
     * @return The value of the _data column, which is typically a file path.
     */
    public static String getDataColumn(Context context, Uri uri,
                                       String selection, String[] selectionArgs) {

        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = {column};

        try {
            cursor = context.getContentResolver().query(uri, projection,
                    selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                final int index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is MediaProvider.
     */
    public static boolean isMediaDocument(Uri uri) {

        return "com.android.providers.media.documents".equals(uri
                .getAuthority());
    }

    /**
     * @param uri The Uri to check.
     * @return Whether the Uri authority is Google Photos.
     */
    public static boolean isGooglePhotosUri(Uri uri) {

        return "com.google.android.apps.photos.content".equals(uri
                .getAuthority());
    }
}
